Various computer-based tools exist for designing, making, generating and otherwise providing custom maps. Most contemporary map tools call on at least one data store of map or geographical data for the raw or processed data used to produce custom maps. The data stores used include many different types of map and map related data. For instance certain databases include terrain, topology or image data, while other databases include street name data and other label data. Depending on the needs of the user and the application of the desired map, different pieces of data can be gathered from the available data stores to generate and/or render a custom map.
Examples of contemporary map generating systems are geographical information systems (GIS). Many contemporary GIS systems attempt to merge aspects of various fields, such as cartography, statistical analysis, or database technology and can be used for various applications such as cartography, remote sensing, land surveying, utility management, natural resource management, photogrammetry, geography, urban planning, emergency management, navigation or localized search engines. Accordingly, the term GIS system can generally refer to any information system that might be used to integrate, store, edit, analyze, share or display geographic information based on user created inquiries, searches, requests or the like to analyze spatial information, edit data or maps or present the results of any of such operations.
Depending on the complexity of the user created request, the processor power of the GIS system and the bandwidth of the network, generating a map can cause undesired delays and drain processor resources of the system or server. Various schemes and systems have been developed to avoid delays and reduce the drain on processor resources associated with the generating and/or rendering of complex and custom maps.
For example, some systems define a number of variations of a particular selection or region of map data and generate a number of predetermined variants of maps for the region based on a set number of variables. The pre-generated variants of the map are then stored in a readily available memory such as a cache. Each pre-generated map is associated with a location, address, or identifier in the memory so it can be easily recalled. The location of the pre-generated regions, or map tiles, can then be recalled for display based on location of the region in a greater overall scheme. For example, larger maps can be constructed of a mosaic of smaller map tiles. Each map tile can be designated by and recalled based on relative or absolute positions of the individual map tiles in the composite map. Map systems that use such map tiles are referred to as tiled-based systems.
Tile-based map systems were originally developed to reduce the load placed on the CPU and disk read functions of map systems. Tile-based map services basically pre-render, store and return predefined map tiles. With such systems, map clients make simple map requests that conform to a tiling schema used by the tile-based map server. In some such systems, each map tile is identified by a unique identifier that is some combination of the row, column, and level identifiers of the map tile. Such map tiles are pre-generated and stored in memory, in which case they are often referred to as being a stored in cache.
The particular tile schema that the map clients uses to make the map requests is generally hardcoded into the client application or defined in some configuration file passed to the client application. Often the client systems directly access the tile using a “Get” request or the request is processed by a light or thin server component. To display a complete map, the client application stitches multiple map tiles together to form a composite mosaic of map tiles. If the map projection requested by the client application is different to that of the stored map tiles, the map tiles need to be re-projected or sampled by the client application, requiring a more advanced client application. Such map client applications stitch together multiple map tiles and perform subsampling between multiple resolutions to provide an interactive user environment. Map tiles are generally cached in local memory or to a disk accessible to the map client application to reduce multiple requests to a map generating server for the same tiles.
The main disadvantage of tile-based map services is the inability to change any property of the stored pre-rendered map tiles (i.e. projection, compression, rendering rule). Such systems assume the map imagery is a static mosaic and simply store a number of map tiles that can be retrieved based on their position in a larger map. In addition, most tile-based map services currently only use 8 bit, 3-band imagery and as a result, image quality is often reduced due to the necessary resampling to create tiles that conform to the tiling scheme.
Although, tile-based servers provide for a high degree of scalability due to the very low load inflicted on the map server, they offer limited flexibility and also require a significant time and resource investment in the map tile server setup phase to generate map tiles that may never be accessed. To avoid some of the setup investment, some tile-based map servers are connected to dynamic map services for producing on-demand map tiles. In such on-demand architectures, map tiles are created by the dynamic map server only when required and only if they do no already exist in the map cache.
The combined use of tile-based based and dynamic map services can increase the flexibility and quality of a map service. Allowing map clients to arbitrarily define the extent, i.e. the size, and boundaries, i.e. columns and rows, of the current display/view shown to a user on the client system, presents a problem for determining whether the requested map exists as a previously generated map in the map cache and then generating the map if it has not. Non-uniform map requests received from different map clients can make it difficult or impossible to verify whether a particular map has been generated and available in cache. Various systems exist for processing the map request to generate a portion of the requested map, however, such processing can inflict an undue strain on the processing power, and disk read capabilities of the map service servers.
As such, there is a need to increase the flexibility of the tile-based map services while also decreasing the load on the map servers of a dynamic map server. Embodiments of the present invention address these and other issues.